perm filename SETDIF.SAI[MUD,SYS] blob sn#553542 filedate 1980-12-31 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "SETDIF"
C00007 ENDMK
C⊗;
BEGIN "SETDIF"

REQUIRE "FLK.HDR[F,ME]" SOURCE_FILE;

DEFINE LOWER=""; COMMENT FLUSH OLD ROUTINE TO UPPERCASIFY!;

DEFINE TOTAB="18",UNTAB="17",ALL="16",DIR="15";

DEFINE MAXL="100";
INTEGER ARRAY VAL,VALUE[1:MAXL];
STRING INFILE,OUTFILE,TEMP,A1,A2,B1,B2;
STRING ARRAY STRNG[1:2];
INTEGER ARRAY EOF[1:2];
INTEGER I,J,K,FLAG,BR1,BR2,CNT1,CNT2,
	BESTI,TOCHAR,L,BEST,EXTRA,LINE,FOO,NDUPS,DEBUG;
INTEGER ARRAY FIELD,ORDER[1:N];
LABEL DOENTER;

SIMPLE BOOLEAN PROCEDURE YES;
	BEGIN
	INTEGER ANS;
	ANS←INCHRW;
	IF ANS=CR THEN INCHRW ELSE OUTSTR(CRLF); ! READ LF IF CR;
	IF (ANS="Y") ∨ (ANS="y") THEN RETURN(TRUE) ELSE RETURN(FALSE);
	END;

SIMPLE PROCEDURE NEXTWORDS;
	BEGIN
	STRNG[1]←LOWER(INPUT(1,LINE));
	STRNG[2]←LOWER(INPUT(2,LINE));
	END;

INTEGER SIMPLE PROCEDURE LESSTHAN;
BEGIN
A1←STRNG[1];
A2←STRNG[2];
WHILE TRUE DO
    BEGIN
    IF (B1←LOP(A1)) < (B2←LOP(A2)) THEN RETURN(1);
    IF B1 > B2 THEN RETURN (2);
    IF B1 = 0 THEN RETURN (0);
    END;
END;

SIMPLE PROCEDURE DOOUT(INTEGER CHANNEL);
BEGIN
IF CHANNEL=0 THEN
	BEGIN 
	NDUPS←NDUPS+1;
	NEXTWORDS;
	RETURN;
	END
ELSE IF CHANNEL=1 THEN BEGIN K←K+1; OUT(0,STRNG[CHANNEL]); OUT(0,CRLF) END;
STRNG[CHANNEL]←LOWER(INPUT(CHANNEL,LINE));
IF EOF[CHANNEL] THEN STRNG[CHANNEL]←"ZZZZZZZZZZZZZZZZZZZ";
END;

SETBREAK(DIR,"⊗"&CR&LF&FF,NULL,"INA");
CNT1←CNT2←MAXL+2;

WHILE TRUE DO
	BEGIN
	OUTSTR("Superset Input file = ");
	OPEN(1,"DSK",0,19,0,CNT1,BR1,EOF[1]);
	INFILE←INCHWL;
	LOOKUP(1,INFILE,FLAG);
	IF NOT FLAG THEN
		IF EQU(INPUT(1,DIR),"COMMENT ⊗") THEN
			BEGIN
			DO INPUT(1,DIR) UNTIL BR1=FF;
			OUTSTR("(Ignoring E directory.)"&CRLF);
			END
		ELSE USETI(1,1);
	IF FLAG THEN OUTSTR("LOOKUP failed."&CRLF) ELSE DONE;
	END;

WHILE TRUE DO
	BEGIN
	OUTSTR("Subset Input file = ");
	OPEN(2,"DSK",0,19,0,CNT2,BR2,EOF[2]);
	INFILE←INCHWL;
	LOOKUP(2,INFILE,FLAG);
	IF NOT FLAG THEN
		IF EQU(INPUT(2,DIR),"COMMENT ⊗") THEN
			BEGIN
			DO INPUT(2,DIR) UNTIL BR2=FF;
			OUTSTR("(Ignoring E directory.)"&CRLF);
			END
		ELSE USETI(2,1);
	IF FLAG THEN OUTSTR("LOOKUP failed."&CRLF) ELSE DONE;
	END;

WHILE TRUE DO
	BEGIN
	OUTSTR("Set difference Output file = ");
	OPEN(0,"DSK",0,0,19,0,0,0);
	OUTFILE←INCHWL;
	LOOKUP(0,OUTFILE,FLAG);
	IF FLAG THEN
		BEGIN
	DOENTER:CLOSE(0);
		ENTER(0,OUTFILE,FLAG);
		IF FLAG THEN OUTSTR("ENTER failed."&CRLF) ELSE DONE;
		END
	ELSE 	BEGIN
		OUTSTR("File already exists: "&OUTFILE&CRLF&"Type Y to replace? ");
		IF YES THEN GOTO DOENTER;
		END;
	END;

SETBREAK(TOTAB,TAB&LF,FF&CR,"INR");
SETBREAK(UNTAB,TAB,FF,"XNR");
SETBREAK(ALL,NULL,NULL,"XNA");
LINE←10;
SETBREAK(LINE,LF,FF&CR&LF,"INS");
NDUPS←K←0;

NEXTWORDS;

WHILE NOT EOF[1] DO DOOUT(LESSTHAN);
			
RELEASE(0);
RELEASE(1);
RELEASE(2);
OUTSTR(CRLF&CVS(NDUPS)&" duplicates in each file.");
OUTSTR(CRLF&CVS(K)&" words in set difference.");
CALL(0,"EXIT");
END "SETDIF"